/*
 * MIT License
 *
 * Copyright (C) 2023 Huawei Device Co., Ltd.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GeneratePropsH.js
 */
#pragma once

#include <cinttypes>
#include <jsi/jsi.h>
#include <react/renderer/components/view/ViewProps.h>
#include <react/renderer/core/PropsParserContext.h>
#include <react/renderer/core/propsConversions.h>
#include <vector>

namespace facebook {
namespace react {
enum class WebViewLayerType { None, Software, Hardware };
enum class WebViewCacheMode { LOAD_DEFAULT, LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE, LOAD_CACHE_ONLY };
enum class WebViewMixedContentMode { Never, Always, Compatibility };
enum class WebViewContentInsetAdjustmentBehavior { Never, Automatic, ScrollableAxes, Always };
enum class WebViewContentMode { Recommended, Mobile, Desktop };
using WebViewDataDetectorTypesMask = uint32_t;
enum class WebViewDataDetectorTypes: WebViewDataDetectorTypesMask {
    Address = 1 << 0,
    Link = 1 << 1,
    CalendarEvent = 1 << 2,
    TrackingNumber = 1 << 3,
    FlightNumber = 1 << 4,
    LookupSuggestion = 1 << 5,
    PhoneNumber = 1 << 6,
    All = 1 << 7,
    None = 1 << 8
};
constexpr bool operator&(WebViewDataDetectorTypesMask const lhs, enum WebViewDataDetectorTypes const rhs)
{
    return lhs & static_cast<WebViewDataDetectorTypesMask>(rhs);
}
constexpr WebViewDataDetectorTypesMask operator|(
    WebViewDataDetectorTypesMask const lhs,
    enum WebViewDataDetectorTypes const rhs)
{
    return lhs | static_cast<WebViewDataDetectorTypesMask>(rhs);
}
constexpr void operator|=(
    WebViewDataDetectorTypesMask &lhs,
    enum WebViewDataDetectorTypes const rhs)
{
    lhs = lhs | static_cast<WebViewDataDetectorTypesMask>(rhs);
}
enum class WebViewMediaCapturePermissionGrantType {
    Prompt, Grant, Deny, GrantIfSameHostElsePrompt, GrantIfSameHostElseDeny
};
struct WebViewContentInsetStruct {
    double top;
    double left;
    double bottom;
    double right;
};
struct WebViewMenuItemsStruct {
    std::string label;
    std::string key;
};
struct WebViewBasicAuthCredentialStruct {
    std::string username;
    std::string password;
};
struct WebViewNewSourceHeadersStruct {
    std::string name;
    std::string value;
};
struct WebViewNewSourceStruct {
    std::string uri;
    std::string method;
    std::string body;
    std::string headers;
    std::string html;
    std::string baseUrl;
};
class JSI_EXPORT WebViewProps final : public ViewProps {
 public:
  WebViewProps() = default;
  WebViewProps(const PropsParserContext &context, const WebViewProps &sourceProps, const RawProps &rawProps);

#pragma mark - Props

    bool allowFileAccess{false};
    bool allowsProtectedMedia{false};
    bool allowsFullscreenVideo{false};
    WebViewLayerType androidLayerType{WebViewLayerType::None};
    WebViewCacheMode cacheMode{WebViewCacheMode::LOAD_DEFAULT};
    bool domStorageEnabled{false};
    std::string downloadingMessage{};
    bool forceDarkOn{false};
    bool geolocationEnabled{false};
    std::string lackPermissionToDownloadMessage{};
    std::string messagingModuleName{};
    int minimumFontSize{0};
    WebViewMixedContentMode mixedContentMode{WebViewMixedContentMode::Never};
    bool nestedScrollEnabled{false};
    std::string overScrollMode{};
    bool saveFormDataDisabled{false};
    bool scalesPageToFit{false};
    bool setBuiltInZoomControls{false};
    bool setDisplayZoomControls{false};
    bool setSupportMultipleWindows{false};
    int textZoom{0};
    bool thirdPartyCookiesEnabled{false};
    bool hasOnScroll{false};
    std::string injectedJavaScriptObject{};
    std::string allowingReadAccessToURL{};
    bool allowsBackForwardNavigationGestures{false};
    bool allowsInlineMediaPlayback{false};
    bool allowsAirPlayForMediaPlayback{false};
    bool allowsLinkPreview{false};
    bool automaticallyAdjustContentInsets{false};
    bool autoManageStatusBarEnabled{false};
    bool bounces{false};
    WebViewContentInsetStruct contentInset{};
    WebViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior{WebViewContentInsetAdjustmentBehavior::Never};
    WebViewContentMode contentMode{WebViewContentMode::Recommended};
    WebViewDataDetectorTypesMask dataDetectorTypes{static_cast<WebViewDataDetectorTypesMask>(
        WebViewDataDetectorTypes::PhoneNumber)};
    double decelerationRate{0.0};
    bool directionalLockEnabled{false};
    bool enableApplePay{false};
    bool hideKeyboardAccessoryView{false};
    bool keyboardDisplayRequiresUserAction{false};
    bool limitsNavigationsToAppBoundDomains{false};
    WebViewMediaCapturePermissionGrantType mediaCapturePermissionGrantType{
        WebViewMediaCapturePermissionGrantType::Prompt};
    bool pagingEnabled{false};
    bool pullToRefreshEnabled{false};
    bool scrollEnabled{false};
    bool sharedCookiesEnabled{false};
    bool textInteractionEnabled{false};
    bool useSharedProcessPool{false};
    std::vector<WebViewMenuItemsStruct> menuItems{};
    std::vector<std::string> suppressMenuItems{};
    bool hasOnFileDownload{false};
    bool fraudulentWebsiteWarningEnabled{false};
    bool allowFileAccessFromFileURLs{false};
    bool allowUniversalAccessFromFileURLs{false};
    std::string applicationNameForUserAgent{};
    WebViewBasicAuthCredentialStruct basicAuthCredential{};
    bool cacheEnabled{false};
    bool incognito{false};
    std::string injectedJavaScript{};
    std::string injectedJavaScriptBeforeContentLoaded{};
    bool injectedJavaScriptForMainFrameOnly{false};
    bool injectedJavaScriptBeforeContentLoadedForMainFrameOnly{false};
    bool javaScriptCanOpenWindowsAutomatically{false};
    bool javaScriptEnabled{false};
    bool webviewDebuggingEnabled{false};
    bool mediaPlaybackRequiresUserAction{false};
    bool messagingEnabled{false};
    bool hasOnOpenWindowEvent{false};
    bool showsHorizontalScrollIndicator{false};
    bool showsVerticalScrollIndicator{false};
    WebViewNewSourceStruct newSource{};
    std::string userAgent{};
    bool shouldStartLoadWithRequestEnabled{false};
};

} // namespace react
} // namespace facebook
